package com.cloudlead.utils.lang.ssh;

import java.io.File;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;

/**
 * 远程服务器操作客户端
 *
 * @Description 远程服务器操作客户端
 * 
 * @date 2014年7月15日 下午4:54:23
 * @author 陆林(lulin@cloudlead-partners.com)
 * @version 2.0
 * @since 2.0
 */
public interface SshClient {
	/**
	 * 执行命令
	 * 
	 * @param output
	 * @param command
	 */
	void executeCommand(OutputStream output, String command);

	/**
	 * 执行脚本
	 * 
	 * @param output
	 * @param shell
	 */
	void executeShell(OutputStream output, String shell);

	void executeShellByFTP(OutputStream output, String shell);

	/**
	 * 上传文件
	 * 
	 * @param output
	 * @param fileName
	 * @param fileContent
	 * @param serverLocation
	 */
	void uploadFile(OutputStream output, String fileName, String fileContent,
			String serverLocation);

	/**
	 * 上传文件
	 * 
	 * @param output
	 * @param fileName
	 * @param fileContent
	 * @param serverLocation
	 */
	void uploadFile(OutputStream output, String fileName,
			InputStream fileContent, String serverLocation);

	/**
	 * 上传文件
	 * 
	 * @param output
	 * @param fileName
	 * @param file
	 * @param serverLocation
	 */
	void uploadFile(OutputStream output, String fileName, File file,
			String serverLocation);

	/**
	 * 上传文件夹
	 * 
	 * @param output
	 * @param folderName
	 * @param folder
	 * @param serverLocation
	 */
	void uploadFolder(OutputStream output, String folderName, File folder,
			String serverLocation);

	/**
	 * 下载文件
	 * 
	 * @param output
	 * @param remoteFile
	 * @param localFolder
	 * @param fileName
	 */
	void downloadFile(OutputStream output, String remoteFile,
			String localFolder, String fileName);

	/**
	 * 下载文件
	 * 
	 * @param output
	 * @param remoteFile
	 * @param localFolder
	 */
	void downloadFile(OutputStream output, String remoteFile, String localFolder);

	/**
	 * 查询文件列表
	 * 
	 * @param output
	 * @param serverLocation
	 * @param readData
	 * @return
	 */
	List<RemoteFile> listFile(OutputStream output, String serverLocation,
			boolean readData);

	/**
	 * 修改权限
	 * 
	 * @param output
	 * @param mode
	 * @param path
	 */
	void chmod(OutputStream output, int mode, String path);

	/**
	 * 修改权限
	 * 
	 * @param output
	 * @param own
	 * @param path
	 */
	void chown(OutputStream output, String own, String path);

	/**
	 * 移动文件
	 * 
	 * @param output
	 * @param source
	 * @param dest
	 */
	void move(OutputStream output, String source, String dest);

	/**
	 * 创建文件夹
	 * 
	 * @param output
	 * @param path
	 */
	void mkdir(OutputStream output, String path);

	/**
	 * 递归创建文件夹
	 * 
	 * @param output
	 * @param path
	 */
	void mkdirs(OutputStream output, String path);

	/**
	 * 删除文件
	 * 
	 * @param output
	 * @param path
	 */
	void delete(OutputStream output, String path);

	/**
	 * 测试连接
	 * 
	 * @param output
	 * @return
	 */
	boolean testConnection(OutputStream output);

}
